home *** CD-ROM | disk | FTP | other *** search
- ParseConfig: Lea EntryTable(PC),A5 ;list of entries available to be included
- Moveq #0,D2
- .ParseLoop Move.L (A5)+,A3 ;get the next entry in the table
- Cmp.L #-1,A3 ;is it the last entry
- Beq.S .ParsingDone
- Bsr.S .ParseEntry ;process the entry
- Bra.S .ParseLoop
-
- .ParsingDone Moveq #1,D2
- .ParseLoop2 Move.L (A5)+,A3 ;get the next entry in the table
- Cmp.L #-1,A3 ;is it the last entry
- Beq.S .ParsingDone2
- Bsr.S .ParseEntry ;process the entry
- Bra.S .ParseLoop2
-
- .ParsingDone2 Lea _Action(PC),A3
- Moveq #-1,D2
- Bsr.S .ParseEntry
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Lea ConfigLine,A0 ;the parser put -1's in to break up the
- Move.L #1023,D1 ;entries. If I had put 0's there, the
- .Cleanup Move.B (A0),D0 ;parser would have thrown a wobbly
- Beq.S .CleanupDone
- Cmp.B #-1,D0 ;so I must now go through and convert
- Bne.S .NotNeg ;all -1's into 0's, so the the main
- Moveq #0,D0 ;routines can work properly
- .NotNeg Move.B D0,(A0)+
- DBra D1,.Cleanup
- .CleanupDone Rts
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- .ParseEntry Cmp.B #1,D2
- Beq.S .NoAbbrev
-
- Lea SearchString(PC),A4 ;this string is for using an abbreviated version of the full identifier
-
- Move.B 4(A3),1(A4) ;get first character for abbreviated string
-
- Move.L A4,A0 ;the string to look for
- Lea ConfigLine,A1 ;the class entry to go looking through
- Bsr FindData ;try and find the data
- Tst.L D0
- Beq.S .EntryFound
-
- .NoAbbrev Lea 4(A3),A0 ;the full identifier. This is if the abbreviated version failed
- Lea ConfigLine,A1 ;the line copied from the config file.
- Bsr FindData
- Tst.L D0
- Bne.S .NoEntry
-
- .EntryFound Move.B #-1,-1(A0) ;mark the start of the entry, by seperating it from the other's
- Move.L A1,(A3) ;return the pointer of the data after the identifier
- Cmp.B #-1,D2
- Beq.S .WSpaceDone
-
- Moveq #0,D0
- Moveq #0,D1
- .WSpaceLoop Move.B (A1)+,D0
- Beq.S .WSpaceDone
- Cmp.B #'\"',D0
- Bne.S .NotQuote
- Not.B D1
- Bra.S .WSpaceLoop
- .NotQuote Cmp.B #' ',D0
- Bne.S .NotSpace
- Tst.B D1
- Beq.S .WSpaceEnd
- .NotSpace Cmp.B #'\t',D0
- Bne.S .WSpaceLoop
- Tst.B D1
- Bne.S .WSpaceLoop
- .WSpaceEnd Move.B #-1,-1(A1)
- .WSpaceDone Rts
-
- .NoEntry Clr.L (A3) ;if no entry was found, clear the data from the previous usages
- Rts
-